The primary purpose of this document is to define and create additional assays to the MultiAssayExperiment object that contain the primary and secondary outcomes of the VIBRANT trial.
tmp |>ggplot() +aes(x = copies_per_swab_med_daily, y = copies_per_swab_med_weekly, col = calibration) +facet_grid( site ~ calibration, labeller = label_both ) +geom_abline(slope =1, intercept =0, color ="black") +geom_point(alpha =0.5, size =0.5) +scale_x_log10("16S copies/swabs - Daily swabs") +scale_y_log10("16S copies/swabs - Weekly swabs") +coord_fixed() +ggtitle("Swabs collected the same day from the same participant")
Comparison of LBP strains in weekly vs daily samples
The primary outcome is “colonization with any of the L. crispatus strains contained in the LBP by 5 weeks of follow-up as assessed by metagenomic sequencing of the vaginal microbial community with detection of any one of LBP strains at >5% relative abundance or a combination of the strains accounting for >10% relative abundance by metagenomics.”
By metagenomics
“LBP colonization” at each visit
We compute, at each visit and for each participant, the total relative abundance of all LBP strains or the maximum relative abundance of any LBP strain.
If the total relative abundance of all LBP strains is larger than 0.1 or the maximum relative abundance of any LBP strain is larger than 0.05, we consider that the LBP achieved colonization_mg at that visit.
colonization_LBP_mg |>ggplot() +aes(x = visit_code, y = pid, fill = colonized_LBP_at_mg) +geom_tile() +facet_grid( randomized + arm ~ ., scales ="free_y", space ="free_y", labeller = label_both ) +theme( strip.text.y =element_text(angle =0) )
“LBP colonization” by each visit
From the colonization_mg status at each visit, we can compute the colonization_mg status by each visit.
A participant is considered to have colonized by a visit if they have been colonized at that visit or any previous visit, starting from their post-product visit (“1200” for all groups).
Since we have some missing visits, we impute these as “not colonized”
We compute, at each visit and for each participant, the total relative abundance of L. crispatus.
If the total relative abundance of L. crispatus strains is larger than 50%, we consider that the participant’s VM was colonized by L. crispatusat that visit.
colonization_crispatus_mg |>ggplot() +aes(x = visit_code, y = pid, fill = crispatus_dominance_at_mg) +geom_tile() +facet_grid( randomized + arm ~ ., scales ="free_y", space ="free_y", labeller = label_both ) +theme( strip.text.y =element_text(angle =0) )
“Crispatus colonization” by each visit
From the colonization_mg status at each visit, we can compute the colonization_mg status by each visit.
A participant is considered to have colonized by a visit if they have been colonized at that visit or any previous visit, starting from their post-product visit (“1200” for all groups).
Since we have some missing visits, we impute these as “not colonized”
We compute, at each visit and for each participant, the relative abundance of each LBP strain as estimated by qPCR by dividing the copies per swab for that strain by the copies per swab for the 16S rRNA gene.
Then, just as we did for the metagenomics, we compute the total relative abundance of all LBP strains or the maximum relative abundance of any LBP strain.
If the total relative abundance of all LBP strains is larger than 0.1 or the maximum relative abundance of any LBP strain is larger than 0.05, we consider that the LBP achieved colonization at that visit by qPCR.
We also consider an additional secondary outcome, which is that if at least 2 strains are detected at >0, we consider that the participant is colonized by LBP at that visit by qPCR.
colonization_qPCR |>ggplot() +aes(x = visit_code, y = pid, fill = colonized_LBP_at_qpcr) +geom_tile() +facet_grid( randomized + arm ~ ., scales ="free_y", space ="free_y", labeller = label_both ) +theme( strip.text.y =element_text(angle =0) )
Code
colonization_qPCR |>ggplot() +aes(x = visit_code, y = pid, fill = LBP_detected_at_qpcr) +geom_tile() +facet_grid( randomized + arm ~ ., scales ="free_y", space ="free_y", labeller = label_both ) +theme( strip.text.y =element_text(angle =0) )
“LBP colonization” by each visit
From the colonization status at each visit, we can compute the colonization status by each visit.
A participant is considered to have colonized by a visit if they have been colonized at that visit or any previous visit, starting from their post-product visit (“1200” for all groups).
Since we have some missing visits, we impute these as “not colonized”
Time since last self-reported study product doses at Week 2 in-clinic visit
We document the time between the last dose taken prior to the in-person visit at week 2 and the swab collected at that visit. This is relevant because the primary outcome is detection of the LBP strain at the week 2 visit, and the time since last dose may influence the likelihood of detection.
Information on the self-reported time of last study product use comes from exposures, while the study day of the week 2 in-person visit is taken from visits_crfs_merged.
We define the following categories for the timing of the last study product use: - “same day”: last dose taken on the same day as the visit (before 6 p.m.) - “day before”: last dose taken the day before the visit - “more than 1 day”: last dose taken more than one day before the visit